package com.seven.good.util;

import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Component
public class WebSourceToFileUtil {

	private static String localPath;

	@Value("${remotefile.localpath}")
	public void setLocalPath(String localPath) {
		WebSourceToFileUtil.localPath = localPath;
	}

	public static String toFile(MultipartFile file) throws IOException {
		String fileId = null;
		//将文件先存到web服务器上（本机），再调用fastdfs的client将文件上传到fastdfs服务器
		//得到文件的原始名称（用于获取后缀扩展名）
		String originalFilename=file.getOriginalFilename();
		//扩展名
		String extention = originalFilename.substring(originalFilename.lastIndexOf(".")+1);
		//文件新名称
		String fileNameNew = UUID.randomUUID()+extention;
		//定义file，使用file存储上传的文件
		File file1 = new File(localPath+fileNameNew);
		file.transferTo(file1);
		//获取新上传文件的物理路径
		String newFilePath = file1.getAbsolutePath();
		//开始往fastdfs服务器上传
		try {
			//加载fastdfs客户端的配置文件
			ClientGlobal.initByProperties("fastdfs-client.properties");
			//创建tracker的客户端
			TrackerClient tracker = new TrackerClient();
			TrackerServer trackerServer = tracker.getConnection();
			//定义storage的客户端
			StorageServer storageServer = null;
			StorageClient1 client = new StorageClient1(trackerServer, storageServer);
			//文件元数据（信息）
			NameValuePair[] metaList = new NameValuePair[1];
			metaList[0] = new NameValuePair("fileName", originalFilename);
			//执行上传，将上传成功的存放在web服务器（本机）上的文件上传到fastdfs
			fileId = client.upload_file1(newFilePath, extention, metaList);
			//通过调用service以及dao将文件的路径存储到数据库中
			//关闭tracker的连接
			trackerServer.close();
		} catch (Exception ex) {
			ex.printStackTrace();
			//统一为IOException
			throw new IOException(ex);
		}
		file1.delete();
		//使文件成为绝对路径
		return  "/"+fileId;
	}
}
